package main

import (
	"bufio"
	"log"
	"net"
	"os"
	"strings"
)

func main() {

	sendfile(readfile())
}

func readfile() (filename string, content []byte) {
	//获取参数
	list := os.Args
	if len(list) != 2 {
		log.Printf("参数不够")
		return "", nil
	}
	fileName := list[1]
	info, e := os.Stat(fileName)
	if os.IsNotExist(e) {
		log.Printf("文件不存在 err=%v", e)
		return "", nil
	}
	fname := info.Name()
	fsize := info.Size()
	log.Printf("fileName=%s ,filesize=%d", fname, fsize)

	file, e := os.Open(fname)
	if e != nil {
		log.Printf("%v", e)
		return "", nil
	}
	reader := bufio.NewReader(file)
	content = make([]byte, 1024*10)
	n, e := reader.Read(content)
	if e != nil {
		log.Printf("%v", e)
		return "", nil
	}
	return fname, content[:n]
}

func sendfile(filename string, content []byte) {
	//建立连接
	conn, e := net.Dial("tcp", "127.0.0.1:9999")
	defer conn.Close()
	if e != nil {
		log.Printf("客户端建立失败err=%s", e)
		return
	}
	//发送文件名称
	conn.Write([]byte(filename))
	tip := make([]byte, 1024*10)
	n, e := conn.Read(tip)
	if e != nil {
		log.Printf("读取返回信息失败=%s", e)
		return
	}
	//成功收到返回值信息 开始发送文件
	if strings.ToUpper(string(tip[:n])) == "OK" {
		i, e := conn.Write(content)
		if e != nil {
			log.Printf("发送数据失败=%s", e)
			return
		}
		if i == len(content) {
			log.Printf("发送完毕，发送成功。")
		}
	} else {
		log.Printf("回复消息错误，程序退出")
	}

}
